package farmers.javcap.bean;

import lombok.Data;
import lombok.SneakyThrows;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

@Data
public class ThreadBean implements Runnable {

	private String fileName;	// 本地文件名
	private String filePath;	// 本地路径

	private String imgName;		// 图片文件名
	private String imgUrl;		// 图片url下载地址

	private String videoName;	// 视频文件名
	private String videoUrl;	// 视频url下载地址

	private final int fileSize = 30 * 1024;

	// 浏览器 中显示图片
//	private boolean openIE = true;
	private boolean openIE = false;

	// 打开浏览器 图片次数
	private static int maxPic = 99;

	public ThreadBean() {

	}

	@SneakyThrows
	@Override
	public void run() {
		if (this.imgExists()) {
			return;
		}

		try {
			this.downloadImg();
//			this.downloadVideo();
			System.out.println(filePath + File.separator + imgName + "\t" + imgUrl + "\t下载成功");
		} catch (Exception e) {
			System.out.println(imgUrl + "\t下载失败 " + e.getMessage());

			if(openIE && maxPic > 0){
				// 打开浏览器
				Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + imgUrl);
				maxPic--;
			}
		}


	}

	// 判断图片是否生成 true=生成 false=不生成
	public boolean imgExists() {
		File file = new File(filePath + File.separator + imgName);

		// 存在文件
		if (file.exists()) {
			// 文件小于 30kb
			if (file.length() < fileSize) {
				file.delete();
				return true;
			}
		} else {
			return false;
		}

		return true;
	}


	// 下载图片
	public void downloadImg() throws Exception{
		URL url = new URL(this.imgUrl);
		URLConnection conn = url.openConnection();
		// 设置超时间为3秒
		conn.setConnectTimeout(10 * 1000);
		// 防止屏蔽程序抓取而返回403错误
		conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
		// 输出流
		InputStream str = conn.getInputStream();
		// 控制流的大小为1k
		byte[] bs = new byte[10240];
		// 读取到的长度
		int len = 0;

		// 是否需要创建文件夹
		File saveDir = new File(this.filePath);
		if (!saveDir.exists()) {
			saveDir.mkdir();
		}
		File file = new File(saveDir + File.separator + this.imgName);
		if(file.exists()){
			return;
		}

		// 实例输出一个对象
		FileOutputStream out = new FileOutputStream(file);
		// 循环判断，如果读取的个数b为空了，则is.read()方法返回-1，具体请参考InputStream的read();
		while ((len = str.read(bs)) != -1) {
			// 将对象写入到对应的文件中
			out.write(bs, 0, len);
		}
		// 刷新流
		out.flush();
		// 关闭流
		out.close();
		str.close();

		// 删除不符合大小的图片
		if (file.length() <= fileSize) {
			file.delete();
		}
	}

	// 下载视频
	public void downloadVideo() throws Exception{
		URL url = new URL(this.videoUrl);
		URLConnection conn = url.openConnection();
		// 设置超时间为3秒
		conn.setConnectTimeout(10 * 1000);
		// 防止屏蔽程序抓取而返回403错误
		conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
		// 输出流
		InputStream str = conn.getInputStream();
		// 控制流的大小为1k
		byte[] bs = new byte[10240];
		// 读取到的长度
		int len = 0;

		// 是否需要创建文件夹
		File saveDir = new File(this.filePath);
		if (!saveDir.exists()) {
			saveDir.mkdir();
		}
		File file = new File(saveDir + File.separator + this.videoName);

		// 实例输出一个对象
		FileOutputStream out = new FileOutputStream(file);
		// 循环判断，如果读取的个数b为空了，则is.read()方法返回-1，具体请参考InputStream的read();
		while ((len = str.read(bs)) != -1) {
			// 将对象写入到对应的文件中
			out.write(bs, 0, len);
		}
		// 刷新流
		out.flush();
		// 关闭流
		out.close();
		str.close();

		// 删除不符合大小的图片
		if (file.length() <= fileSize) {
			file.delete();
		}
	}

//
//	/**
//	 * 抓取网上的图片
//	 *
//	 * @param imgSrc
//	 * @param filePath
//	 */
//	public void downloadImgByNet(String imgSrc, String filePath, String fileName) throws Exception{
//		URL url = new URL(imgSrc);
//		URLConnection conn = url.openConnection();
//		// 设置超时间为3秒
//		conn.setConnectTimeout(10 * 1000);
//		// 防止屏蔽程序抓取而返回403错误
//		conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//		// 输出流
//		InputStream str = conn.getInputStream();
//		// 控制流的大小为1k
//		byte[] bs = new byte[10240];
//		// 读取到的长度
//		int len = 0;
//
//		// 是否需要创建文件夹
//		File saveDir = new File(filePath);
//		if (!saveDir.exists()) {
//			saveDir.mkdir();
//		}
//		File file = new File(saveDir + File.separator + fileName);
//
//		// 实例输出一个对象
//		FileOutputStream out = new FileOutputStream(file);
//		// 循环判断，如果读取的个数b为空了，则is.read()方法返回-1，具体请参考InputStream的read();
//		while ((len = str.read(bs)) != -1) {
//			// 将对象写入到对应的文件中
//			out.write(bs, 0, len);
//		}
//		// 刷新流
//		out.flush();
//		// 关闭流
//		out.close();
//		str.close();
//
//		// 删除不符合大小的图片
//		if (file.length() <= fileSize) {
//			file.delete();
//		}
//	}

}